/******************************************************************************
 *      Mestrado em Ciência da Computação - UFMS
 *		Redes de Computadores - Prof. Dr. Ronaldo Alves Ferreira
 *		Alunos: Geraldo Landre, Marcel Tolentino, Vinícius Bueno
 *****************************************************************************/
/* tfinsert.c - tfinsert */

#include "tcpfms.h"
#include "tcb.h"
#include "tcp.h"

/*------------------------------------------------------------------------
 *  tfinsert - adiciona um novo segmento de fragmento TCP
 *  para uma sequencia de fila TCB
 *------------------------------------------------------------------------
 */
//verificar
int tfinsert(struct tcb *ptcb, tcpseq seq, unsigned datalen)
{
  	struct	tcpfrag	*tf;

	if (datalen == 0)
            return OK;
	tf = (struct tcpfrag *)malloc(sizeof(struct tcpfrag));
	tf->tf_seq = seq;
	tf->tf_len = datalen;
	if (ptcb->tcb_rsegq == NULL)
            //ptcb->tcb_rsegq = newq(NTCPFRAG, 0); // NTCPFRAG: tamanho da fila, 0: fila controlada por semaforo
            ptcb->tcb_rsegq = newqueue(NTCPFRAG);
        
	//if (enq(ptcb->tcb_rsegq, tf, -tf->tf_seq) < 0)
        //    freemem(tf, sizeof(struct tcpfrag));
        if(queue_length(ptcb->tcb_rsegq) == NTCPFRAG)
            free(tf);
        else
            enqueue(ptcb->tcb_rsegq, (int)tf);
  
	return OK;
}
